<?php
/**
 * 销售
 * @copyright   Copyright (c) 2006 - 2010 DZH 友拓软件友拓通
 * @category   	账目信息
 * @package  	Action
 * @author    	李恺弘
 * @version 	2.1,2012-07-22
 */
class SaleOrderPublicBehavior extends Behavior {
	
	public function run(&$params){ 
		$params['flow_type'] = 'sale_order';///定义修改状态的流程来源的类型
		T('SaleOrder')->run($params,'getState');///更改销售单状态
		if (ACTION_NAME=='update'){
			if (C('delivery.relation_predelivery')==1){///判断是否有配货 
				
				$model	=	D('PreDelivery');
				$info	=	$model->where('sale_order_id='.$params['id'])->find();
				if (is_array($info)){///销售单已配货
					///删除配货单 
					$model->setModuleInfo('PreDelivery','delete');
					$model->relationDelete($info['id']);
				} 
			}  
		}
	}
	
	/**
	 * update的业务规则
	 *
	 * @param uget post 数组合并结果，自动传参$params
	 */
	public function update($params){  
		
		$this->edit($params); 
	}
	
	/**
	 * 删除前置验证，自动调用同名方法
	 *
	 * @param uget post 数组合并结果，自动传参$params
	 */
	public function edit($params){  
		$id	=	$params['id'];///销售单ID 
		if ($this->saleOrderState($id,3)==false) {
			throw_json('已发货不可操作！');
		} 
		
	}
	 
	/**
	 * 删除前置验证，自动调用同名方法
	 *
	 * @param uget post 数组合并结果，自动传参$params
	 */
	protected  function delete($params){
		$id		=	$params['id'];///销售单ID  
		if ($id>0){
			$model	=	M('sale_order');
			$count 	=	$model->where('id='.$id.' and order_type=2')->count(); 
			$info	=	$model->find($id);
			if ($count>0&&MODULE_NAME=='SaleOrder') {
				throw_json('换货单不可操作！');
			}   
			if ($this->saleOrderState($id,1)==false) {
				throw_json('后续流程已操作,不可操作！');
			}
			if($info['invoice_state']==2){
				throw_json(L('been_invoiced'));
			}
		}else{
			throw_json('参数错误不可操作！');
		}
		
	}
	
	
	/**
	 * 判断销售单状态是否已发货
	 *
	 * @param int $id
	 * @param int $state
	 * @return bool
	 */
	public function saleOrderState($id,$state=3){
		if (C('sale.relation_sale_follow_up')==1){///销售是否有后续流程  
			$model	=	M('sale_order');
			$count =	$model->where('id='.$id.' and sale_order_state>'.$state)->count();  
			if ($count>0) {
				return false;
			} 
			///验证是否部分发货
			$DeliveryCount 			= 	M('delivery_detail')->where('sale_order_id='.$id.' ')->count();
			if ($DeliveryCount>0) {
				return false;
			}  
		} 
		
		return true;
	}
	
	
}